package com.cloud.system.api.service;

import java.util.List;
import java.util.Map;

import com.cloud.system.api.bean.*;
import com.cloud.system.api.entity.HumanInfo;
import com.cloud.system.api.entity.RoleInfo;
import com.cloud.system.common.result.QkTreeNode;
import com.github.pagehelper.PageInfo;

public interface HumanInfoService {
    /**
     * 加载机构人员树
     *
     * @param unitId
     * @param isRoot
     * @param isSupervise
     * @return
     */
    public List<QkTreeNode> listHumanTree(long unitId, boolean isRoot, String isSupervise,boolean isScreen);

    /**
     * 查找人员
     *
     * @param name
     * @return
     */
    public List<HumanInfo> search(String name);

    /**
     * 加载人员
     *
     * @param id
     * @param isSupervise
     * @return
     */
    public List<HumanInfo> loadHumansByUnitId(long id, String isSupervise);

    /**
     * 加载人员信息
     *
     * @param id
     * @return
     */
    public HumanInfo loadHuman(long id);

    /**
     * 加载人员岗位信息
     *
     * @param id
     * @return
     */
    public List<RoleInfo> loadRolesByHuman(long id);

    /**
     * 加载人员信息
     *
     * @param id
     * @return
     */
    public HumanInfo load(long id);

    /**
     * 初始化人员加载界面
     *
     * @param unitId
     * @return
     */
    public HumanInfo showAdd(long unitId);

    /**
     * 保存或更新人员信息
     *
     * @param humanInfo
     * @return
     */
    Map<Integer,HumanInfo> saveUpdate(HumanInfo humanInfo);

    /**
     * 逻辑删除人员信息
     *
     * @param id
     * @return
     */
    public long delete(long id);

    /**
     * 保存人员岗位信息
     *
     * @param form
     * @return
     */
    public long saveUpdateHumanRoles(HumanRoleForm form);

    /**
     * 根据用户名查找用户
     *
     * @param username
     * @return
     */
    public List<HumanInfo> loadByUserName(String username);

    /**
     * 人员重排序
     *
     * @param humans
     * @return
     */
    public int reorderHumans(List<HumanInfo> humans);

    /**
     * 加载导入的人员信息
     *
     * @param humans
     * @return
     */
    public Map<String, List<HumanImportBean>> analyseImportFile(List<HumanImportBean> humans);

    /**
     * 提交导入信息
     *
     * @param unitId
     * @param humans
     * @return
     */
    public Long importHumans(Long unitId, List<HumanInfo> humans);

    /**
     * 获取当前登录人profile信息
     *
     * @return
     */
    public HumanProfile loadProfileInfo();

    /**
     * 更新用戶profile信息
     *
     * @param profile
     */
    public void updateProfile(HumanProfile profile);

    /**
     * 记载指定人员基本信息
     *
     * @param humanId
     * @return
     */
    public HumanDetail loadHumanUnitDetail(long humanId);

    /**
     * 查询执法人员信息
     *
     * @param criteria
     * @return
     */
    PageInfo<HumanInfo> listPatrolPage(PatrolCriteriaBean criteria);

    /**
     *  执法队员学历统计
     * @return
     * @param isSupervise
     */
    List<Map<String, Object>> getPatrolEduStat(Integer isSupervise);

    /**
     * 执法人员性质
     * @return
     */
    List<Map<String, Object>> getPatrolNatureStat();

    /**
     *  执法类型统计
     * @return
     * @param isSupervise
     */
    List<Map<String, Object>> getPatrolLawTypeStat(Integer isSupervise);

    /**
     * 执法人员性别统计
     * @return
     * @param isSupervise
     */
    List<Map<String, Object>> getPatrolGenderStat(Integer isSupervise);

    /**
     * 执法人员区域统计
     * @return
     * @param isSupervise
     */
    List<Map<String, Object>> getPatrolAreaStat(Integer isSupervise);

    /**
     * 执法证统计
     * @return
     */
    List<Map<String, Object>> getPatrolCardStat();

    /**
     * 是否拥有执法证统计
     * @return
     */
    List<Map<String, Object>> getObtainLawCardStat();

    /**
     * 是否拥有执法证统计
     * @return
     */
    List<Map<String,Object>> getLawCardFlagStat();

    /**
     * 是否公职律师统计
     * @return
     */
    List<Map<String, Object>> getLawyerStat();

    /**
     * 加载机构下的执法人员
     * @param unitId
     * @return
     */
	public List<HumanDetail> searchLawyers(long unitId, String query);

    /**
     * 执法人员区域统计-大屏
     * @return
     * @param isSupervise
     */
    Map<String, Object> getPatrolAreaStatForScreen(Integer isSupervise,Long regionid);

    /**
     * 执法人员年龄
     * @return
     */
    List<Map<String, Object>> getPatrolAgeStat();

    /**
     * 修改人员核实状态
     * @param id
     * @return
     */
    long confirm(long id);

    /**
     * 获取区域内人员数量
     * @param isSupervise
     * @return
     */
    Integer getPatrolCount(Integer isSupervise);
    
    /**
     * 人员所属机构调整
     * @param adjustBean
     */
    public void humanUnitAdjust(HumanUnitAdjustBean adjustBean);

    /**
     * 密码修改
     * @param profile
     */
     boolean changePassword(HumanProfile profile);

    /**
     * 加挂人员查询
     * @param params
     * @return
     */
    public Map<String, List<HumanInfo>> searchAddStaff(String params);

    /**
     * 人员加挂
     * @param huamnInfo
     */
    public void addStaff(HumanInfo huamnInfo);

    /**
     * 人员加挂撤销
     * @param humanId
     */
    public void delStaff(Long humanId);

    /**
     * 加载执法机关工作人员
     * @param unitId
     * @return
     */
    public List<HumanInfo> loadStaffsByUnitId(Long unitId,String humanType);
    
    /**
     * 流程批转细化到人
     * @param partId 机构/岗位
     * @param unitId 当前机构
     * @param filter 是否只显示当前机构下的人员
     * @return
     */
	public List<WfActPart> transSearch(String partType, long partId, long unitId, boolean filter);

    /**
     * 重置密码
     * @param humanId
     * @return
     */
    int resetPassword(Long humanId);

    /**
     * 加载机构管理员信息
     * @param unitId
     * @return
     */
    HumanDetail getHumanInfoByUnitId(Long unitId);
}
